package cn.edu.bjut.my.thinkinjava._2019_08_05_init;

/**
 * 以下代码验证类中属性值与构造函数的执行顺序；
 * 在类的内部，变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间，
 * 他们仍旧会在任何方法（包括构造器）被调用之前得到初始化。
 * 所以以下执行顺序为：
 * window1
 * window2
 * window3
 * new House
 * window4
 */
public class House {
    Window w1 = new Window(1);

    House() {

        System.out.println("new House");
        w3 = new Window(4);
    }

    Window w2 = new Window(2);
    Window w3 = new Window(3);

    public static void main(String[] args) {
        new House();

    }
}

class Window {
    Window(int maker) {
        System.out.println("window" + maker);
    }
}